package tsb.sax;

import tsb.util.StrCmp;
import tsb.util.StrOp;

/**
 *
 * verifica que el tag xml leido corresponde a un tag de final de elemtno
 */
class ValidadorTagFinal implements IValidador {
    String str;

    public boolean validar(String str) {
        boolean resultado = true;
        this.str = str;

        try {

            if (StrCmp.esInicioFin(str, "</", ">") == false) {
                resultado = false;
            }
            else if (StrCmp.isEmpty(str, "</", ">") == true) {
                resultado = false;
            }
            else if (StrCmp.tieneMasDe(str, "<", 1,true) == true) {
                resultado = false;
            }
            else if (StrCmp.tieneMasDe(str, ">", 1,true) == true) {
                resultado = false;
            }
            else if (StrCmp.tieneMasDe(str, ">", 1,true) == true) {
                resultado = false;
            }
            else if (StrCmp.tieneMasDe(str, "?", 0,true) == true) {
                resultado = false;
            }
            else if (StrCmp.tieneMasDe(str, "-", 0,true) == true) {
                resultado = false;
            }
            else if (StrCmp.tieneMasDe(str, "!", 0,true) == true) {
                resultado = false;
            }
            else if (StrCmp.tieneMasDe(str, "/", 1,true) == true) {
                resultado = false;
            }
            else if (StrCmp.validarNombreTag(str, "</", ">") == false) {
                resultado = false;
            }
            else if (validarSinVariables(str, "</", ">") == false) {
                resultado = false;
            }
            
        } catch (Exception e) {
            resultado = false;
        } finally {
            return resultado;
        }
    }

    private boolean validarSinVariables(String str, String tInicio, String tFinal) {
        return StrOp.separar(str, " ", tInicio, tFinal, '"', '"').length == 1;
    }
}
